package com.semac.client.paginas.inscricaoatividade;

import java.util.ArrayList;
import java.util.Date;

import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.i18n.client.DateTimeFormat;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.uibinder.client.UiHandler;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.AbsolutePanel;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.CheckBox;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.TextArea;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;
import com.google.gwt.user.datepicker.client.DateBox;
import com.semac.client.aplicacao.Pagina;
import com.semac.client.aplicacao.PaginasController;
import com.semac.client.componentes.atividadestable.AtividadeCellTable;
import com.semac.client.componentes.atividadestable.AtividadeCellTableDeleteEvent;
import com.semac.client.componentes.atividadestable.AtividadeCellTableEventHandler;
import com.semac.client.componentes.atividadestable.AtividadeCellTableInscreveEvent;
import com.semac.client.componentes.atividadestable.AtividadeCellTableSelectEvent;
import com.semac.client.componentes.combo.Combo;
import com.semac.client.componentes.listaministrantes.SeletorDeMinistrantes;
import com.semac.client.componentes.loading.Loading;
import com.semac.client.componentes.popups.BlockingPopupPanel;
import com.semac.client.componentes.semactable.SemanaAcademicaSelectionEvent;
import com.semac.client.componentes.semactable.SemanaAcademicaSelectionEventHandler;
import com.semac.client.componentes.semactable.SemanacCellTable;
import com.semac.client.rpc.AtividadeRPCServices;
import com.semac.client.rpc.PessoaRPCServices;
import com.semac.client.rpc.PessoaRPCServicesAsync;
import com.semac.client.rpc.RPCCallBackWrapper;
import com.semac.client.rpc.SemanacRPCService;
import com.semac.shared.model.Atividade;
import com.semac.shared.model.Pessoa;
import com.semac.shared.model.SemanaAcademica;

public class InscricaoAtividadeUI extends Composite implements Pagina, AtividadeCellTableEventHandler, SemanaAcademicaSelectionEventHandler{

	
	private PessoaRPCServicesAsync servicoPessoas = PessoaRPCServices.Util.getInstance();
	
	private Atividade atividadeAtual;
	
	private static InscricaoAtividadeUIUiBinder uiBinder = GWT.create(InscricaoAtividadeUIUiBinder.class);
	@UiField DateBox diaAtividadeDataBox;
	@UiField TextBox limiteAlunosBox;
	@UiField Button salvarAlteracoesBtn;
	@UiField TextArea descricaoAtividadeTextArea;
	@UiField(provided=true) AtividadeCellTable atividadeCellTable = new AtividadeCellTable(true,false);
	@UiField TextBox tituloAtividadeBox;
	@UiField Button criarAtividadeBtn;
	@UiField Button button_1;
	@UiField AbsolutePanel painelEdicaoAtividade;
	@UiField CheckBox temInscricaoChkBox;
	@UiField SeletorDeMinistrantes ministrantesSeletor;
	@UiField Combo horaIni;
	@UiField Combo minIni;
	@UiField Combo horaFim;
	@UiField Combo minFim;
	@UiField TextBox sala;
	@UiField Loading loadingPanel;
	@UiField Button deletarButton;
	@UiField Label nenhumaAtividadeCadastradaLabel;
	@UiField VerticalPanel edicaoAtividadesDaSemanaVP;
	@UiField(provided=true) SemanacCellTable semanacCellTable = new SemanacCellTable();
	@UiField AbsolutePanel edicaoSemanaPanel;
	@UiField Button adicionarSemanaButton;
	@UiField Loading semanaLoading;
	@UiField CheckBox ativaCheckBox;
	@UiField TextBox descricaoSemanaTextBox;
	@UiField DateBox inicioSemanac;
	@UiField DateBox fimSemanac;
	@UiField DateBox inicioInscr;
	@UiField DateBox fimInscr;
	@UiField Button cancelarBtnSemanac;
	@UiField Button salvarSemanac;
	@UiField Label noSemanacAvailableLabel;
	@UiField Button editarSemanaSelecionadaBtn;
	@UiField Button excluirSemanacBtn;
	@UiField Label noSemanaAcademicaSelecionada;
	private SemanaAcademica semanaAcademicaSelected;
	private BlockingPopupPanel loadingPopup;
	
//	 DateTimeFormat.PredefinedFormat

	interface InscricaoAtividadeUIUiBinder extends
			UiBinder<Widget, InscricaoAtividadeUI> {
	}

	public InscricaoAtividadeUI() {
		initWidget(uiBinder.createAndBindUi(this));
		this.diaAtividadeDataBox.setFormat(new DateBox.DefaultFormat(DateTimeFormat.getFormat("dd/MM/yyyy")));

		this.inicioInscr.setFormat(new DateBox.DefaultFormat(DateTimeFormat.getFormat("dd/MM/yyyy")));
		this.inicioSemanac.setFormat(new DateBox.DefaultFormat(DateTimeFormat.getFormat("dd/MM/yyyy")));
		this.fimInscr.setFormat(new DateBox.DefaultFormat(DateTimeFormat.getFormat("dd/MM/yyyy")));
		this.fimSemanac.setFormat(new DateBox.DefaultFormat(DateTimeFormat.getFormat("dd/MM/yyyy")));
		
		this.loadingPopup = new BlockingPopupPanel();
		this.loadingPopup.hide();
		
		this.addHandlers();
		
		this.semanacCellTable.setRowData(new ArrayList<SemanaAcademica>());
		this.nenhumaAtividadeCadastradaLabel.setVisible(true);
		this.atividadeCellTable.setRowData(new ArrayList<Atividade>());
		this.noSemanacAvailableLabel.setVisible(true);
		
//		this.atualizaListaDeAtividades();
		this.atualizaListaDeSemanasAcademicas();
		this.pegaPossiveisMinistrantesDoBanco();
	}


	private void addHandlers() {
		this.atividadeCellTable.addHandler(this, AtividadeCellTableSelectEvent.TYPE);
		this.atividadeCellTable.addHandler(this, AtividadeCellTableDeleteEvent.TYPE);
		
		this.semanacCellTable.addHandler(this, SemanaAcademicaSelectionEvent.TYPE);
	}


	/* Início codigo relativo a lista de semanas academicas
	 */

	private void atualizaListaDeSemanasAcademicas(){
		SemanacRPCService.Util.getInstance().getSemanasAcademicasLike(
				new SemanaAcademica(), 
				new RPCCallBackWrapper<ArrayList<SemanaAcademica>>(semanaLoading,true) {
					@Override
					public void gotResult(ArrayList<SemanaAcademica> result) {
						if (result != null && result.size() > 0)
							semanacCellTable.setRowData(result);
						
						noSemanacAvailableLabel.setVisible(result == null || result.size() == 0);
					}
		});
	}
	
	

	@Override
	public void onSemanaAcademicaSelect(SemanaAcademicaSelectionEvent event) {
		this.semanaAcademicaSelected = event.getSemanaAcademica();
		this.editarSemanaSelecionadaBtn.setEnabled(this.semanaAcademicaSelected != null);
		this.criarAtividadeBtn.setEnabled(this.semanaAcademicaSelected != null);
		this.edicaoAtividadesDaSemanaVP.setVisible(this.semanaAcademicaSelected != null);
		this.noSemanaAcademicaSelecionada.setVisible(this.semanaAcademicaSelected == null);
		this.atualizaCamposSemanac();
		this.atualizaListaDeAtividades();
		//esconde o painel de edicao quando a semana academica selecionada nao eh nula.
//		if (this.semanaAcademicaSelected != null){
//			this.edicaoSemanaPanel.setVisible(false);
//		}
		
	}


	
	private void atualizaCamposSemanac() {
		if (this.semanaAcademicaSelected != null){
			this.ativaCheckBox.setValue(this.semanaAcademicaSelected.isAtiva());
			this.descricaoSemanaTextBox.setText(this.semanaAcademicaSelected.getDescricao());
			this.inicioInscr.setValue(this.semanaAcademicaSelected.getInicioInscricao());
			this.inicioSemanac.setValue(this.semanaAcademicaSelected.getDataIni());
			this.fimInscr.setValue(this.semanaAcademicaSelected.getFimInscricao());
			this.fimSemanac.setValue(this.semanaAcademicaSelected.getDataFim());
		}else{
			this.ativaCheckBox.setValue(false);
			this.descricaoSemanaTextBox.setText("");
			this.inicioInscr.setValue(null);
			this.inicioSemanac.setValue(null);
			this.fimInscr.setValue(null);
			this.fimSemanac.setValue(null);
		}
		
		this.excluirSemanacBtn.setVisible(this.semanaAcademicaSelected != null);
	}
	
	

	@UiHandler("cancelarBtnSemanac")
	void onCancelarBtnSemanacClick(ClickEvent event) {
		this.edicaoSemanaPanel.setVisible(false);
	}
	
	
	
	@UiHandler("editarSemanaSelecionadaBtn")
	void onEditarSemanaSelecionadaBtnClick(ClickEvent event) {
		this.editarSemanaSelecionadaBtn.setEnabled(this.semanaAcademicaSelected != null);
		this.edicaoSemanaPanel.setVisible(this.semanaAcademicaSelected != null);
	}
	
	
	

	@UiHandler("adicionarSemanaButton")
	void onAdicionarSemanaButtonClick(ClickEvent event) {
		this.semanacCellTable.clearSelection();
		this.edicaoSemanaPanel.setVisible(true);
	}
	
	
	

	@UiHandler("excluirSemanacBtn")
	void onExcluirSemanacBtnClick(ClickEvent event) {
		if (this.semanaAcademicaSelected != null && this.semanaAcademicaSelected != null){
			if (Window.confirm("Atenção!!! \n\n" +
								"Você deseja realmente excluir esta semana acadêmica? \n" +
								"Isto irá: \n" +
								"- Automaticamente excluir todas as atividades referentes a essa semana; \n" +
								"- Excluir todo o histórico de presenças dos alunos que participaram das atividades; \n" +
								"- Excluir toda relação de ministrantes para as atividades excluídas;")){
				//CHECAGEM dupla se tem certeza de que quer excluir um histórico de semana acadêmica!
				if (Window.confirm("Certeza absoluta??? \n\n" +
								   "Esta ação não é reversível, este é o último aviso antes da exclusão permanente!")){
					SemanacRPCService.Util.getInstance().excluirSemanaAcademica(this.semanaAcademicaSelected.getCodSemana(), new RPCCallBackWrapper<Void>(this.loadingPopup,true) {
						@Override
						public void gotResult(Void result) {
							Window.alert("Semana acadêmica excluída com sucesso.");
							edicaoSemanaPanel.setVisible(false);
							semanacCellTable.clearSelection();
							atualizaListaDeSemanasAcademicas();
						}
					});
				}
			}
		}
	}
	
	
	
	/**
	 * Salva alteracoes de uma semana academica selecionada ou salva uma nova semana academica no banco.
	 * @param event
	 */
	@UiHandler("salvarSemanac")
	void onSalvarSemanacClick(ClickEvent event) {
		SemanaAcademica semanaObject = this.validaCamposDaSemanaAcademicaESetaObjeto();
		if (semanaObject == null)
			return;
		
		SemanacRPCService.Util.getInstance().salvaSemanaAcademica(semanaObject, new RPCCallBackWrapper<Integer>(this.loadingPopup,true) {
			@Override
			public void gotResult(Integer result) {
				Window.alert("Semana acadêmica salva com sucesso!");
				edicaoSemanaPanel.setVisible(false);
				semanacCellTable.clearSelection();
				atualizaListaDeSemanasAcademicas();
			}
		});
	}
	
	

	/**
	 * faz validacoes dos campos e retorna um objeto da semana academica.
	 * @return
	 */
	private SemanaAcademica validaCamposDaSemanaAcademicaESetaObjeto() {
		SemanaAcademica semanaObject = null;
		
		//testa se campos obrigatorios estao preenchidos.
		if (this.inicioInscr.getValue() == null ||
				this.inicioSemanac.getValue() == null ||
				this.fimInscr.getValue() == null ||
				this.fimSemanac.getValue() == null ||
				this.descricaoSemanaTextBox.getText().trim().equals("")){		
			Window.alert("Campo deixado em branco!");
		}else{
			if (this.inicioSemanac.getValue().after(this.fimSemanac.getValue())){
				Window.alert("A data de início da semana acadêmica não deve ser após a data de término.");
				this.inicioSemanac.setFocus(true);
			}else if (this.inicioInscr.getValue().after(this.fimInscr.getValue())){
				Window.alert("A data de início das inscrições dos alunos nas atividades da semana acadêmica não deve ser posterior à data de término.");
				this.inicioInscr.setFocus(true);
			}else{
				semanaObject = new SemanaAcademica();
				//se editando uma semana, temos que garantir que a id seja a mesma.
				if (this.semanaAcademicaSelected != null){
					semanaObject.setCodSemana(this.semanaAcademicaSelected.getCodSemana());
				}
				//seta a data de fim para o ultimo segundo do dia de fim.
				semanaObject.setDataFim(new Date(fimSemanac.getValue().getTime() + 86399999));
				semanaObject.setDataIni(this.inicioSemanac.getValue());
				semanaObject.setAtiva(this.ativaCheckBox.getValue());
				semanaObject.setInicioInscricao(this.inicioInscr.getValue());
				//seta a data de fim para o ultimo segundo do dia de fim.
				semanaObject.setFimInscricao(new Date(this.fimInscr.getValue().getTime() + 86399999));
				
				semanaObject.setDescricao(this.descricaoSemanaTextBox.getText());
			}
		}
		
		return semanaObject;
	}
	
	
	/* Fim do código relativo a lista de semanas academicas 
	 * e início do codigo relativo a lista de atividades de uma semana academica
	 */

	
	



	private void pegaPossiveisMinistrantesDoBanco() {
		servicoPessoas.getPossiveisMinistrantes(new RPCCallBackWrapper<ArrayList<Pessoa>>(this.loadingPanel,true) {
			@Override
			public void gotResult(ArrayList<Pessoa> result) {
				ministrantesSeletor.populaListaComPessoas(result);
			}
		});
	}
	
	
	
	


	private void atualizaListaDeAtividades(){
		if (this.semanaAcademicaSelected != null && this.semanaAcademicaSelected.getCodSemana() != null){
			Atividade filtro = null;
			filtro = new Atividade();
			filtro.setCodSemac(this.semanaAcademicaSelected.getCodSemana());
			AtividadeRPCServices.Util.getInstance().selecionaAtividadesLike(filtro, true, new RPCCallBackWrapper<ArrayList<Atividade>>(this.loadingPanel, true) {
				@Override
				public void gotResult(ArrayList<Atividade> result) {
					atividadeCellTable.setRowData(result);
					nenhumaAtividadeCadastradaLabel.setVisible(result == null || result.size() == 0);
				}
			});
		}else{
			atividadeCellTable.setRowData(new ArrayList<Atividade>());
			nenhumaAtividadeCadastradaLabel.setVisible(true);
		}			
	}

	
	
	
	private void editaAtividade(Atividade ativ){
		this.painelEdicaoAtividade.setVisible(true);
		this.atividadeAtual = ativ;
		this.setaCamposDoFormulario(this.atividadeAtual);
	}
	
	
	
	private void limpaEdicao(){
		this.editaAtividade(new Atividade());
		this.painelEdicaoAtividade.setVisible(false);
		this.atividadeCellTable.cancelSelection();
		this.deletarButton.setVisible(false);
	}
	
	
	
	//botao de criar atividade
	@UiHandler("criarAtividadeBtn")
	public void onCriarAtividadeBtnClick(ClickEvent event) {
		limpaEdicao();
		this.editaAtividade(new Atividade());		
	}
	
	//botao salvar alteracoes das atividades
	@UiHandler("salvarAlteracoesBtn")
	public void onSalvarAlteracoesBtnClick(ClickEvent event) {
		
		if (this.atividadeAtual == null){
			this.limpaEdicao();
		}
		
		//se a verificacao nao deu certo, aborta...
		if (!this.verificaCampos())
			return;
		

		loadingPanel.setVisible(true);
		
		if (this.atividadeAtual.getId() == null){
			AtividadeRPCServices.Util.getInstance().cadastraAtividade(atividadeAtual, new RPCCallBackWrapper<Void>(this.loadingPopup, true) {
				@Override
				public void gotResult(Void result) {
					Window.alert("Inserido com sucesso!");
					atualizaListaDeAtividades();
					limpaEdicao();		
				}
			});
		}else{			
			AtividadeRPCServices.Util.getInstance().updateAtividade(atividadeAtual, new RPCCallBackWrapper<Void>(this.loadingPopup,true) {
				@Override
				public void gotResult(Void result) {
					Window.alert("Atualizado com sucesso!");
					atualizaListaDeAtividades();
					limpaEdicao();	
				}
			});
		}
			
	}
	
	private boolean verificaCampos() {
		String campoEmBranco = "Campo deixado em branco!";
		if (this.descricaoAtividadeTextArea.getText().trim().equals("")){
			this.descricaoAtividadeTextArea.setFocus(true);
			Window.alert(campoEmBranco);
			return false;
		}
		if (this.tituloAtividadeBox.getText().trim().equals("")){
			this.tituloAtividadeBox.setFocus(true);
			Window.alert(campoEmBranco);
			return false;
		}
		if (this.diaAtividadeDataBox.getValue() == null){
			this.diaAtividadeDataBox.setFocus(true);
			Window.alert(campoEmBranco);
			return false;
		}
		
		
		if (!this.validaDatas())
			return false;
		
		
		if (this.limiteAlunosBox.getText().trim().equals("")){
			
			this.limiteAlunosBox.setFocus(true);
			Window.alert(campoEmBranco);
			return false;
		}
		
		Integer limiteAlunos;
		try{
			limiteAlunos = Integer.parseInt(this.limiteAlunosBox.getText().trim());
			if (limiteAlunos < 0){
				this.limiteAlunosBox.setFocus(true);
				Window.alert("Valor não pode ser negativo!");
				return false;
			}
		}catch (Exception e) {
			this.limiteAlunosBox.setFocus(true);
			Window.alert("Valor não numérico..");
			return false;
		}
		
		atividadeAtual.setDescricao(this.descricaoAtividadeTextArea.getText().trim());
		atividadeAtual.setTemInscricao(this.temInscricaoChkBox.getValue());
		atividadeAtual.setTitulo(this.tituloAtividadeBox.getText().trim());
		atividadeAtual.setInicioDaAtividade(getDataIniEvento());
		atividadeAtual.setFimDaAtividade(getDataFimEvento());
		atividadeAtual.setLimiteAlunos(limiteAlunos);
		atividadeAtual.addMinistrantes(this.ministrantesSeletor.getMinistrantes());
		atividadeAtual.setSala(this.sala.getText());
		
		if (this.semanaAcademicaSelected == null){
			Window.alert("Semana acadêmica não selecionada...");
			return false;
		}
		
		atividadeAtual.setCodSemac(this.semanaAcademicaSelected.getCodSemana());
		
		return true;
		
			
	}

	
	private Date getDataIniEvento(){
		String hora, mins;
		DateTimeFormat completeDateFormatter = DateTimeFormat.getFormat("dd/MM/yyyy HH:mm");
		
		hora = this.horaIni.getSelectedItemAsString();
		if (hora == null || hora.equals(""))
			return null;
		
		mins = this.minIni.getSelectedItemAsString();
		if (mins == null || mins.equals(""))
			return null;
		
		String dia = this.diaAtividadeDataBox.getTextBox().getText();
		if (dia == null)
			return null;
		
		Date finalDate = null;
		try{
			finalDate = completeDateFormatter.parse(dia + " " + hora + ":" + mins);
		}catch (Exception e) {
			return null;
		}
		
		return finalDate;
	}
	
	
	private Date getDataFimEvento(){
		String hora, mins;
		DateTimeFormat completeDateFormatter = DateTimeFormat.getFormat("dd/MM/yyyy HH:mm");
		
		hora = this.horaFim.getSelectedItemAsString();
		if (hora == null || hora.equals(""))
			return null;
		
		mins = this.minFim.getSelectedItemAsString();
		if (mins == null || mins.equals(""))
			return null;
		
		String dia = this.diaAtividadeDataBox.getTextBox().getText();
		if (dia == null)
			return null;
		
		Date finalDate = null;
		try{
			finalDate = completeDateFormatter.parse(dia + " " + hora + ":" + mins);
		}catch (Exception e) {
			return null;
		}
		
		return finalDate;
	}
	

	private boolean validaDatas() {
		if (this.getDataIniEvento() == null || this.getDataFimEvento() == null){
			Window.alert("Selecione data e horas válidas de inicio e fim da atividade.");
			return false;			
		}else{
			Date dataInicial = this.getDataIniEvento();
			Date dataFinal = this.getDataFimEvento();
			int result = dataInicial.compareTo(dataFinal);
			if (result >= 0){
		
				Window.alert("A hora de término da atividade não pode ser igual ou inferior a hora de início.");
				return false;
			}
			
			//checa se a data escolhida para a atividade está dentro do intervalo da semana academica
			if (semanaAcademicaSelected != null){
				if (dataInicial.before(this.semanaAcademicaSelected.getDataIni())){
					Window.alert("A data da atividade não pode ser anterior ao dia de início da semana acadêmica.");
					return false;
				}else if (dataFinal.after(this.semanaAcademicaSelected.getDataFim())){
					Window.alert("A data da atividade não pode ser após o dia de término da semana acadêmica.");
					return false;
				}
			}
			
		}
		
		return true;
	}

	
	

	//botaCancelar
	@UiHandler("button_1")
	public void onButton_1sBtnClick(ClickEvent event) {
		this.limpaEdicao();
	}	
	

	private void setaCamposDoFormulario(Atividade atividade){
		DateTimeFormat hoursFormatter = DateTimeFormat.getFormat("H");
		DateTimeFormat minsFormatter = DateTimeFormat.getFormat("m");
		try{
			this.diaAtividadeDataBox.setValue(atividade.getDiaDaAtividade());		
		}catch (Exception e) {}
		try{
			this.horaIni.setItemSelected(hoursFormatter.format(atividade.getDiaDaAtividade()));	
		}catch (Exception e) {
			this.horaIni.setItemSelected("");
		}
		try{
			this.horaFim.setItemSelected(hoursFormatter.format(atividade.getFimDaAtividade()));	
		}catch (Exception e) {
			this.horaFim.setItemSelected("");
		}
		
		try{
			this.minIni.setItemSelected(minsFormatter.format(atividade.getDiaDaAtividade()));		
		}catch (Exception e) {
			this.minIni.setItemSelected("");
		}
		try{
			this.minFim.setItemSelected(minsFormatter.format(atividade.getFimDaAtividade()));		
		}catch (Exception e) {
			this.minFim.setItemSelected("");
		}
		
		try{
			this.limiteAlunosBox.setText(atividade.getLimiteAlunos().toString());		
		}catch (Exception e) {}
		
		
		this.descricaoAtividadeTextArea.setText(atividade.getDescricao());		
		this.tituloAtividadeBox.setText(atividade.getTitulo());		
		this.temInscricaoChkBox.setValue(atividade.isTemInscricao());		
		
		this.sala.setText(atividade.getSala());
		
		this.ministrantesSeletor.setMinistrantes(atividade.getMinistrantes());
	}


	
	
	@Override
	public void onAtividadeSelect(AtividadeCellTableSelectEvent event) {
		this.editaAtividade(event.getAtividade());
	}

	
	@Override
	public void onAtividadeInscreve(AtividadeCellTableInscreveEvent event) {
		// do nothing
	}

	@Override
	public void onAtividadeDelete(AtividadeCellTableDeleteEvent event) {
		if (Window.confirm("Deseja realmente deletar esta atividade? \n\n" +
						   "Isto irá acarretar as seguintes mudanças: \n" +
						   "- Eliminação do histórico dos alunos que frequentaram essa atividade (lista de presença)\n" +
						   "- Eliminação do histórico de tutores dessa atividade")){
			if (event.getAtividade() != null && event.getAtividade().getId() != null)
				
				AtividadeRPCServices.Util.getInstance().removeAtividade(event.getAtividade(), new RPCCallBackWrapper<Void>(this.loadingPanel,true) {
					@Override
					public void gotResult(Void result) {
						Window.alert("Removido com sucesso!");
						atualizaListaDeAtividades();
						limpaEdicao();
					}
				});
		}
	}


	@Override
	public Widget getView() {
		return this;
	}

	

	@Override
	public String getValorHistoryToken() {
		return PaginasController.COORDENACAO;
	}	

}
